package com.pai4j.message.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.HashMap;
import java.util.Map;

/**
 * 消息发送结果
 * 封装消息发送的结果信息
 *
 * @author PAI4J Team
 * @date 2025-11-01
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SendResult {

    /**
     * 是否发送成功
     */
    private boolean success;
    

    /**
     * 响应代码
     */
    private String code;

    /**
     * 响应消息
     */
    private String message;

    /**
     * 发送耗时（毫秒）
     */
    private Long costTime;

    /**
     * 发送渠道
     */
    private String channel;

    /**
     * 发送时间戳
     */
    private Long sendTime;

    /**
     * 扩展数据
     */
    @Builder.Default
    private Map<String, Object> extData = new HashMap<>();

    /**
     * 创建成功结果
     */
    public static SendResult success(String channel) {
        return SendResult.builder()
                .success(true)
                .channel(channel)
                .code("SUCCESS")
                .message("发送成功")
                .sendTime(System.currentTimeMillis())
                .build();
    }

    /**
     * 创建消息发送失败结果
     */
    public static SendResult failure(String code, String message, String channel) {
        return SendResult.builder()
                .success(false)
                .code(code)
                .message(message)
                .channel(channel)
                .sendTime(System.currentTimeMillis())
                .build();
    }

    /**
     * 添加扩展数据
     */
    public SendResult addExtData(String key, Object value) {
        if (this.extData == null) {
            this.extData = new HashMap<>();
        }
        this.extData.put(key, value);
        return this;
    }
}

